
import React, { useState } from 'react';
// import './index.scss';
import { removeBackground } from '@imgly/background-removal';
import { Spin, Button, Upload, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
 
function App() {
    // 用于保存用户上传的文件
    const [file, setFile] = useState(null);
    // 用于保存上传或处理的消息
    const [messageText, setMessageText] = useState('');
    // 用于保存文件的预览图像 URL
    const [preview, setPreview] = useState('');
    // 用于保存处理后的图像 URL
    const [processedImage, setProcessedImage] = useState('');
    // 用于控制 loading 状态
    const [loading, setLoading] = useState(false);
 
    // 处理文件选择事件
    const handleFileChange = (event) => {
        const selectedFile = event.target.files[0];
        if (selectedFile) {
            setFile(selectedFile); // 更新选中的文件
            setMessageText(''); // 清空消息
            setPreview(URL.createObjectURL(selectedFile)); // 设置文件的预览图像 URL
            setProcessedImage(''); // 清空处理后的图像
        }
    };
 
    // 处理文件上传和图像处理
    const handleUpload = async () => {
        if (!file) {
            setMessageText('请先选择一个文件。'); // 提示用户选择文件
            return;
        }
 
        setLoading(true); // 开始加载状态
 
        try {
            // 将选中的文件转换为 Blob 对象
            const fileBlob = new Blob([file], { type: file.type });
            console.log('File Blob:', fileBlob); // 调试用：打印文件 Blob 对象
 
            // 调用 removeBackground 函数处理图像
            const processedBlob = await removeBackground(fileBlob);
            console.log('Processed Blob:', processedBlob); // 调试用：打印处理后的 Blob 对象
 
            // 将处理后的 Blob 对象转换为 URL
            const processedUrl = URL.createObjectURL(processedBlob);
            console.log('Processed URL:', processedUrl); // 调试用：打印处理后的图像 URL
 
            // 更新处理后的图像 URL
            setProcessedImage(processedUrl);
            setMessageText('文件上传并处理成功！'); // 提示用户处理成功
        } catch (error) {
            console.error(error); // 打印错误信息
            setMessageText('处理文件时出错。'); // 提示用户处理出错
        } finally {
            setLoading(false); // 结束加载状态
        }
    };
 
    return (
        <div className="App">
            <h1>文件上传和智能抠图示例</h1>
            {/* 文件选择输入框 */}
            <Upload
                customRequest={({ file, onSuccess }) => {
                    handleFileChange({ target: { files: [file] } });
                    onSuccess();
                }}
                showUploadList={false}
            >
                <Button icon={<UploadOutlined />}>选择文件</Button>
            </Upload>
            {/* 上传并处理文件的按钮 */}
            <Button type="primary" onClick={handleUpload} disabled={loading}>
                上传并处理文件
            </Button>
            {/* 显示 loading 效果 */}
            {loading && <Spin size="large" />}
            {/* 显示消息 */}
            {messageText && <div className="message">{messageText}</div>}
            {/* 显示文件的预览图像 */}
            {preview && (
                <div className="preview">
                    <h2>原始图像</h2>
                    <img src={preview} alt="Preview" />
                </div>
            )}
            {/* 显示处理后的图像 */}
            {processedImage && (
                <div className="processed-preview">
                    <h2>处理后的图像</h2>
                    <img src={processedImage} alt="Processed Preview" />
                </div>
            )}
        </div>
    );
}
 
export default App;